import { autoTrackerReport } from '../tracker/actionTracker';
import { hashPageTrackerReport, historyPageTrackerReport } from '../tracker/pageTracker';
import { errorTrackerReport } from '../tracker/errorTracker';

// 加载监控配置项,和vuejs简易版开发思路差不多
export function loadMinitorConfig(options) {
  const { 
    appId,  // 软件id
    userId, // 用户id
    reportUrl, //后端url(专门将监控数据存到后台服务器的地址)
    autoTracker, // 是否自动埋点(埋点分为自动埋点和手动埋点)
    delay, // 是否延迟和合并上报的功能,delay=0时候不延迟上报。这里用到了缓存和节流思想
    hashPage, // 是否是hash,有hash和history两种路由
    errorReport // 是否开启错误监控
  } = options;
  //将这些信息都存在浏览器全局，加_这样子就不会导致与window上原有的属性冲突
  if (appId) {
    window['_monitor_app_id_'] = appId;
  }
  if (userId) {
    window['_monitor_user_id_'] = userId;
  }
  if (reportUrl) {
    window['_monitor_report_url_'] = reportUrl;
  }
  if (delay) {
    window['_monitor_delay_'] = delay;
  }
  if (errorReport) {
    errorTrackerReport();
  }
  // --------- 是否开启无痕埋点 ----------
  if (autoTracker) {
    autoTrackerReport();
  }
  if (hashPage) {
    hashPageTrackerReport(); // hash路由上报
  } else {
    historyPageTrackerReport(); // history路由上报
  }
}

// 无痕埋点时候,递归遍历找到当前被点击元素的dom路径，如*[@id="root"]/DIV[1]/DIV[2]/BUTTON[1],在元素中可以搜索出来
export function getDomPath(element) {
  if (element.id !== ''){
    return '//*[@id="' + element.id + '"]';
  }

  if (element === document.body){
    return element.tagName;
  }
  let index= 0;
  let siblings = element.parentNode.childNodes;
  for (let i = 0; i < siblings.length; i++) {
    let sibling = siblings[i];
    if (sibling === element){
      return getDomPath(element.parentNode) + '/' + element.tagName + '[' + (index + 1) + ']';
    }
    if (sibling.nodeType === 1 && sibling.tagName === element.tagName){
      index ++;
    }
  }
}
